AutoLisp从入门到放弃(二)

您所在的位置:网站首页 CAD LISP开发视频教程 AutoLisp从入门到放弃(二)

AutoLisp从入门到放弃(二)

2023-10-13 02:53| 来源: 网络整理| 查看: 265

一、AutoLisp简介 AutoLisp是Autodesk公司开发的一种Lisp语言,旨在节省工程师的绘图时间,后也用来制作一些简单的绘图插件,甚至完成一个完整的CAD二次开发项目。 二、你的第一行AutoLisp代码 (prompt "\nHello, Welcome to AutoLisp!")

        上述代码的作用是在AutoCAD命令行输出一个字符串:Hello,Welcome to AutoLisp!,直接将这行代码复制到AutoCAD的命令行中,按下回车,会看到如下结果:

如图,可以看到,我们要输出的字符串在执行完这行代码之后在命令行中进行了显示。

三、AutoLisp代码的基本语法规则

        如果你是一个C/C++程序员,那么你可能会对上述的代码结构很反感,这完全不像是一门编程语言。但是如果你更深入的了解Lisp语法规则之后就会发现,你的第一感觉是正确的(至少我现在还是这么认为)。接下来我们就来介绍一下Lisp的语法规则:

     

规则1:

        所有函数、表达式都要包含在括号内,左括号“ ( ”与右括号“ ) ”一定要成对出现,括号内部的字符串的双引号“ " ”与“ " ”也要成对出现。

规则2:

        表达式格式:(函数名  运算符  运算符  运算符)

        * 函数名:功能函数与自定义函数。

       *  运算符:AutoLisp中的所有数据类型(原子和列表)。

        其实AutoLisp的核心语法规则就只有上述两点,极其简陋,这里不再进行展开介绍,我们后续通过实际代码来理解更加直观易懂。

四、AutoLisp数据类型

        在上述内容中,我们提到了AutoLisp表达式中的运算符可以是所有数据类型,那么AutoLisp中都为我们定义了哪些数据类型呢?

整形(INT)即整数,整数由数字和正负号组成,正号可省略。实型(REAL)带小数点的数。(注:-1~1之间的小数中的0不可以省略)字符串(STR)字符串的最大长度为100,空字符串可以用""表示。列表(LIST)用括号将多个数据合并为一个数据的数据类型。函数(SUBS)函数相当于子程序或过程。可分为内部函数和外部函数。文件描述符(FILE)类似于文件指针,是AutoLISP赋于被打开文件的标识号。图元名(ENAME)AutoCAD为图形对象指定的16进制的数字标识。选择集(PICKSET)一个或多个图形对象命名的集合。VLA对象VLA 对象是ActiveX 应用程序的主要组成部分。

        上述九种就是AutoLisp的数据类型,我们在后续的学习中都会使用到。

五、AutoLisp函数的定义

        知道了AutoLisp的语法结构和数据类型,我们就可以编写AutoLisp代码了。接下来我们要实现一个简单的加法运算,在这个函数中,我们需要用到以下函数:

defun:定义函数关键字,用于定义用户命令。 setq:AutoLisp中的赋值函数,相当于 "=",具体用法符合语法规则2

               (setq 表达式1 表达式2)  ;; 将表达式2的值赋给表达式1

+:数学库函数。求两个数的和。

               (+ 表达式1 表达式2)  ;; 计算表达式1与表达式2的和

(defun Add() (setq #iNum1 1) ;; 赋值 (setq #iNum2 2) (setq #iNumSum (+ #iNum1 #iNum2)) ;; 求和 )

        将上述代码直接复制到AutoCAD命令行之后,命令行会输出函数名 ADD,表明这个函数加载成功。接下来我们在命令行中直接输入

(Add)

        会看到如下效果:

         上述内容介绍了如何定义一个简单的求和函数并执行,可能大家已经注意到了以下几个问题,

我们的函数中没有声明任何变量,都是直接赋值的。定义Add函数的时候,我们在Add后面有一个空的括号。第二行和第四行代码中出现的之前没有提到过的符号 ";;" 和汉字。

        接下来我们逐一解答上述三个问题:

AutoLisp中没有指代变量类型的标识符,所有变量都是直接使用的,变量的类型就是最后一次操作该变量的数据类型。例如:有一个变量a,将其赋值为整型的数据1,这时a变量的类型就是整型;在之后的运算中,又将一个实型的数据0.1赋值给变量a,这时a变量的类型又变成了实型。基于这种特性,我们使用变量的时候需要特别小心,最好的办法就是人为的为变量加上前缀,这样就能放心的使用所有变量了。Add后面的()实际上是这个函数的参数和变量列表,括号中的参数和变量使用 "/" 分割。AutoLisp中使用";" ";;" ";;;" 来注释代码,所有分号之后的语句都是注释掉的语句。

        接下来,我们对上述的代码做简单的调整如下:

(defun Add(#iNum1$ #iNum2$ / #iNumSum) (setq #iNumSum (+ #iNum1$ #iNum2$)) ;; 求和 )

        如下图所示重复上述加载、执行操作,会得到如下结果:

         在这次执行结果中,我们在输入命令的时候不是简单的输入了一个(Add),而是输入了

(Add 1 2)

         这是因为,我们这一次定义的函数中,Add后边的括号中加入了参数和变量列表,"/"之前的为参数列表,表明我们需要在调用这个函数的时候传入两个参数,"/" 之后的部分是我要在这个函数中用到的变量(代码中所有#、$等标识符都是区别不同类型的变量的标识,没有实际意义)。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3